home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1996 / MacHack 1996.toast / Hacks / Hacks ’95 / ProcessBar™ / Code / Sources / Layers.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-23  |  7.2 KB  |  220 lines  |  [TEXT/MMCC]

  1. /*
  2.     File:        Layers.h
  3.  
  4.     Copyright:    © 1983-1993 by Apple Computer, Inc.
  5.                 All rights reserved.
  6.  
  7.     Version:    System 7.1
  8.     Created:    Thursday, April 28, 1989 18:00
  9.  
  10. */
  11.  
  12. #pragma once
  13.  
  14. #ifndef __LAYERS__
  15. #define __LAYERS__
  16.  
  17. #ifndef __TYPES__
  18. #include <Types.h>
  19. /*    #include <ConditionalMacros.h>                                */
  20. /*    #include <MixedMode.h>                                        */
  21. /*        #include <Traps.h>                                        */
  22. #endif
  23.  
  24. #ifndef __QUICKDRAW__
  25. #include <Quickdraw.h>
  26. /*    #include <QuickdrawText.h>                                    */
  27. /*        #include <IntlResources.h>                                */
  28. #endif
  29.  
  30. enum {
  31.     kLayerUnk1 = 1,
  32.     kLayerUnk2,
  33.     kLayerGetFirstLayer,
  34.     kLayerUnk4,
  35.     kLayerUnk5,
  36.     kLayerGetFirstLayerWindow,
  37.     kLayerGetLayerForPSN
  38. };
  39.  
  40.  
  41. enum {
  42. /* result codes from PortType */
  43.     layerPort    = 0,
  44.     grafPort    = 1
  45.     };
  46.  
  47. enum {
  48. /* relative positioning (pRelative) codes for AutoPosition routines */
  49.     apMainScreen            = 0,
  50.     apParentWindowScreen    = 1,
  51.     apParentWindow            = 2,
  52. /* position vertical/horizontal (pVertical/pHorizontal) codes for AutoPosition routines */
  53.     apNone                    = 0,
  54.     apCenter                = 1,
  55. /* additional position vertical (pVertical) codes for AutoPosition routines */
  56.     apAlert                    = 2,
  57.     apStagger                = 3
  58.     };
  59.  
  60. #define kFromTheFirst (GrafPtr) -1
  61. #define kToTheLast (GrafPtr) -1
  62. #define kThisLayerSubtreeOnly (GrafPtr) 0
  63.  
  64. enum {
  65. /* result codes from LayerDoProcPtr */
  66.     layerDoGoRight    = 700,            /* don't traverse down the Layer tree */
  67.     layerDoHalt        = 701            /* don't traverse any more (only seen on occasion) */ 
  68.     };
  69.  
  70. typedef GrafPtr LayerPtr;
  71.  
  72. typedef pascal short (*LayerDoProcPtr)(GrafPtr thePort, LayerPtr parent, void *yourDataPtr);
  73.  
  74. typedef struct LayerRecord LayerRecord;
  75. typedef LayerRecord *LayerPeek;
  76.  
  77. #if defined(powerc) || defined (__powerc)
  78. #pragma options align=mac68k
  79. #endif
  80. struct LayerRecord {
  81.     GrafPort                    port;
  82.     short                        windowKind;
  83.     Boolean                        visible;
  84.     Boolean                        reserved1;
  85.     Boolean                        neverActive;
  86.     Boolean                        reserved2;
  87.     RgnHandle                    strucRgn;
  88.     RgnHandle                    contRgn;
  89.     RgnHandle                    updateRgn;        //    documented as reserved3
  90.     Handle                        windowDefProc;    //    documented as reserved4
  91.     LayerPtr                    parent;
  92.     AuxWinHandle                auxWinHead;        //    documented as reserved5
  93.     short                        reserved6;
  94.     AuxCtlHandle                auxCtlHead;        //    documented as reserved7
  95.     LayerPeek                    nextWindow;
  96.     WindowPeek                    subWindows;
  97.     long                        refCon;
  98.     };
  99. #if defined(powerc) || defined(__powerc)
  100. #pragma options align=reset
  101. #endif
  102.  
  103. typedef struct WState WState;
  104. typedef WState *WStatePtr, **WStateHndl;
  105.  
  106. #if defined(powerc) || defined (__powerc)
  107. #pragma options align=mac68k
  108. #endif
  109. struct WState {
  110.     short    version;
  111.     Rect    rect;
  112.     Boolean    zoom;
  113.     };
  114. #if defined(powerc) || defined(__powerc)
  115. #pragma options align=reset
  116. #endif
  117.  
  118. #ifdef __cplusplus
  119. extern "C" {
  120. #endif
  121.  
  122. /* returns portRect in global coordinates */
  123. extern pascal void PortRectGlobal(GrafPtr thePort, Rect *theRect)
  124. TWOWORDINLINE (0x70F6, 0xA829);
  125. /* parent = if nil then if begin is nil or kFromTheFirst use current layer else use begin's parent
  126.  * end = if kThisLayerSubtreeOnly use parent (will only traverse subtree), if kToTheLast use end-of-list (nil)
  127.  * begin = if nil or kFromTheFirst use parent's first child
  128.  */
  129. extern pascal short ForEachPortDo(GrafPtr begin, GrafPtr end, LayerPtr parent, LayerDoProcPtr doProc, void *yourDataPtr)
  130. TWOWORDINLINE (0x70F8, 0xA829);
  131. /* get parent layer for the layer/window */
  132. extern pascal LayerPtr GetParentLayer(GrafPtr thePort)
  133. TWOWORDINLINE (0x70F9, 0xA829);
  134. /* returns the type of port */
  135. extern pascal short PortType(GrafPtr thePort)
  136. TWOWORDINLINE (0x70FA, 0xA829);
  137. extern pascal OSErr GetDeskPort(GrafPtr *deskPort)
  138. TWOWORDINLINE (0x70FB, 0xA829);
  139. extern pascal Boolean CheckUpdateInLayer(EventRecord *theEvent, LayerPtr theLayer)
  140.  TWOWORDINLINE (0x70FC, 0xA829);
  141. /* returns top window in layer which is not a floater */
  142. extern pascal WindowPtr GetSelectable(LayerPtr theLayer)
  143. TWOWORDINLINE (0x70FD, 0xA829);
  144. /* returns top window in current layer(s) which is not a floater */
  145. extern pascal WindowPtr GetFrontWindow(void)
  146. TWOWORDINLINE (0x70FE, 0xA829);
  147. /* returns the supreme parent layer */
  148. extern pascal LayerPtr GetRootLayer(void)
  149. TWOWORDINLINE (0x70FF, 0xA829);
  150. extern pascal void InitLayers(void)
  151. TWOWORDINLINE (0x7000, 0xA829);
  152. /* theLayer is the storage to hold the new layer.  if zero storage it is allocated via NewPtr */
  153. extern pascal OSErr NewLayer(LayerPtr *theLayer, Boolean visible, Boolean neverActive, WindowPtr behind, long refCon)
  154. TWOWORDINLINE (0x7001, 0xA829);
  155. extern pascal Boolean IsLayer(GrafPtr thePort)
  156. TWOWORDINLINE (0x7002, 0xA829);
  157. extern pascal LayerPtr GetCurLayer(void)
  158. TWOWORDINLINE (0x7003, 0xA829);
  159. extern pascal void SetCurLayer(LayerPtr theLayer)
  160. TWOWORDINLINE (0x7004, 0xA829);
  161. extern pascal LayerPtr SwapCurLayer(LayerPtr theLayer)
  162. TWOWORDINLINE (0x7005, 0xA829);
  163. /* simply returns the first port in layer */
  164. extern pascal GrafPtr GetFirstPort(LayerPtr theLayer)
  165. TWOWORDINLINE (0x7006, 0xA829);
  166. /* returns FindWindow result codes */
  167. extern pascal short FindWindowCurLayer(WindowPtr *whichWindow, Point where)
  168. TWOWORDINLINE (0x7007, 0xA829);
  169. /* if useDevice is true position will be relative screen that intersects theRect */
  170. extern pascal void AutoPositionPortInRect(GrafPtr thePort, Rect *theRect, Boolean useDevice, Byte pVertical, Byte pHorizontal)
  171. TWOWORDINLINE (0x7008, 0xA829);
  172. extern pascal void AutoPositionPort(GrafPtr thePort, Byte pRelative, Byte pVertical, Byte pHorizontal)
  173. TWOWORDINLINE (0x7009, 0xA829);
  174. /* theSize can be nil inwhich case the size is not returned */
  175. extern pascal OSErr GetWindowState(WindowPtr theWindow, WStateHndl theState, long *theSize)
  176. TWOWORDINLINE (0x700A, 0xA829);
  177. extern pascal OSErr SetWindowState(WindowPtr theWindow, WStateHndl theState)
  178. TWOWORDINLINE (0x700B, 0xA829);
  179. extern pascal void InvalAllLayers(void)
  180. TWOWORDINLINE (0x700D, 0xA829);
  181.  
  182. extern pascal void UnknownLayer_9(LayerPtr, RgnHandle)
  183. TWOWORDINLINE (0x70F7, 0xA829);
  184. extern pascal Boolean UnknownLayer12(LayerPtr, Byte, Byte)
  185. TWOWORDINLINE (0x700C, 0xA829);
  186.  
  187. /* nice routine definitions (documented as working with LayerPtr) */
  188. #define HiddenLayer(theLayer) (((LayerPeek)theLayer)->visible)
  189.  
  190. #define    CloseLayer(theLayer) CloseWindow(theLayer)
  191. #define    DisposeLayer(theLayer) DisposeWindow(theLayer)
  192. #define SelectLayer(theLayer) SelectWindow(theLayer)
  193. #define HideLayer(theLayer) HideWindow(theLayer)
  194. #define ShowLayer(theLayer) ShowWindow(theLayer)
  195. #define ShowHideLayer(theLayer, showFlag) ShowHide(theLayer, showFlag)
  196. #define BringLayerToFront(theLayer) BringToFront(theLayer)
  197. #define    SendLayerBehind(theLayer, behindPort) SendBehind(theLayer, behindPort)
  198. #define SetLRefCon(theLayer, newRef) SetWRefCon(theLayer, newRef)
  199. #define GetLRefCon(theLayer) GetWRefCon(theLayer)
  200.  
  201. #define    LayerClipAbove(theLayer) ClipAbove(theLayer)
  202. #define    LayerSaveOld(theLayer) SaveOld(theLayer)
  203. #define    LayerDrawNew(theLayer, updateFlag) DrawNew(theLayer, updateFlag)
  204. #define LayerPaintOne(theLayer, badRgn) PaintOne(theLayer, badRgn)
  205. #define    LayerPaintBehind(theLayer, badRgn) PaintBehind(theLayer, badRgn)
  206. #define    LayerCalcVis(theLayer) CalcVis(theLayer)
  207. #define    LayerCalcVisBehind(theLayer, badRgn) CalcVisBehind(theLayer, badRgn)
  208.  
  209. #ifdef __cplusplus
  210. }
  211. #endif
  212.  
  213. // Prototypes
  214. LayerPtr FindLayerForSignature(OSType processSig);
  215. WindowPtr GetFrontWindowForSignature(OSType processSig);
  216. LayerPtr FindLayerForPSN(ProcessSerialNumber *psn);
  217. LayerPtr ProcessLayer( ProcessSerialNumber *psn );
  218.  
  219.  
  220. #endif